/**
 * 
 */
package org.statewalker.fsm;

/**
 * This is a strategy used to provide new states for processes.
 * 
 * @author kotelnikov
 */
public interface IFsmStateProvider<S, E> {

    /**
     * Returns the next state of the process.
     * 
     * @param process the process for which the next state should be returned
     * @param state the previous state of the specified parent
     * @param event the event initializing the transition from the given
     *        sub-state
     * @return the next state corresponding to the specified transition
     */
    S getNextState(FsmProcess<S, E> process, S state, E event);
}
